July 08, 2020
카카오 맵에서 네이버 맵, 구글 맵으로 바로 바꿀 수 있도록 추상화를 하기
main.ts
navigator.geolocation.getCurrentPosition((result) => {
const geocoder = new kakao.maps.services.Geocoder();
geocoder.coord2RegionCode(result.coords.longitude, result.coords.latitude, (coordRes, status) => {
if (status === kakao.maps.services.Status.OK) {
this.api.getDistrictFromCode(coordRes[0].code).pipe(
tap(([ city = '', district = '', town = '' ]) => {
this.formGroup.patchValue({
city, district, town,
position: [ result.coords.latitude, result.coords.longitude ]
});
})
).subscribe();
} else {
console.error(status);
}
});
},
);main.ts
this.geolocation.getCurrentPosition().pipe(
mergeMap((result) => {
return this.geolocation.coord2RegionCode(result.longitude, result.latitude).pipe(
mergeMap((regionCode: string) => {
return this.api.getDistrictFromCode(regionCode).pipe(
tap(([ city = '', district = '', town = '' ]) => {
this.formGroup.patchValue({
city, district, town,
position: [ result.latitude, result.longitude ]
});
}),
)
})
)
}),
).subscribe()service.ts
coord2RegionCode(longitude: number, latitude: number) {
return new Observable(observer => {
kakao.maps.load(() => {
const geocoder = new kakao.maps.services.Geocoder();
geocoder.coord2RegionCode(longitude, latitude, (coordRes, status) => {
if (status === kakao.maps.services.Status.OK) {
observer.next(coordRes[0].code);
observer.complete();
} else {
observer.error(status);
}
});
});
});
}